<?php

App::import('Sanitize');

class IntervencionesController extends AppController {

    var $name = 'Intervenciones';
    var $paginate = array(
        'Intervencione' => array('recursive' => 0,
            'order' => array('Intervencione.id ASC'),
            'limit' => 10,),
        'Obra' => array('recursive' => 0,
            'order' => array('Obra.id ASC'),
            'limit' => 10,)
    );

    function beforeFilter() {
        parent::beforeFilter();
        //$this->Auth->allow();
    }

    function __mime_content_type($filename) {
        $mime_types = array(
            'txt' => 'text/plain',
            // archives
            'zip' => 'application/zip',
            'rar' => 'application/x-rar-compressed',
            // adobe
            'pdf' => 'application/pdf',
            // ms office
            'doc' => 'application/msword',
            'rtf' => 'application/rtf',
            'xls' => 'application/vnd.ms-excel',
            'ppt' => 'application/vnd.ms-powerpoint',
            // open office
            'odt' => 'application/vnd.oasis.opendocument.text',
            'ods' => 'application/vnd.oasis.opendocument.spreadsheet',
        );

        $ext = strtolower(array_pop(explode('.', $filename)));
        if (array_key_exists($ext, $mime_types)) {
            return true;
        } else {
            return false;
        }
    }

    function add_intervencion($obra_id = null) {
        $this->__aux_add_intervencion($obra_id);
    }

    function admin_add_intervencion($obra_id = null) {
        $this->__aux_add_intervencion($obra_id);
    }

    /**
     * Contiene la vista con las solapas para dar de alta una nueva intervención de una obra de arte
     */
    function __aux_add_intervencion($obra_id = null) {
        if (!empty($obra_id)) {
            $this->set(compact('obra_id'));
            $this->render('add_intervencion');
        }
    }

    function add_datos_generales($obra_id = null) {
        $this->__aux_add_datos_generales($obra_id);
    }

    function admin_add_datos_generales($obra_id = null) {
        $this->__aux_add_datos_generales($obra_id);
    }

    /**
     * Permite dar de alta una nueva intervención de una obra de arte
     * @param <type> $obra_id
     */
    function __aux_add_datos_generales($obra_id = null) {
        $this->layout = false;

        $obrasTipos = $this->ObrasTipo->find('list', array('fields' => array('ObrasTipo.id', 'ObrasTipo.nombre')));
        $obras_tipo_id = 0;
        $intervencionesTipos = $this->Intervencione->IntervencionesTipo->find('list', array('fields' => array('IntervencionesTipo.id', 'IntervencionesTipo.nombre')));
        $intervenciones_tipo_id = 0;
        $niveles = $this->Nivele->find('list', array('fields' => array('Nivele.id', 'Nivele.nivel_servicio')));
        $nivele_id = 0;
        $obra_name = '';
        $entidad_responsable = '';
        $fecha_inicio = '';
        $fecha_fin = '';
        $hidden_intervencione_id = '';

        if (!empty($this->data)) {

            $this->__save_datos_generales($this->data, $_FILES);
        } elseif (!empty($obra_id)) {
            if ($this->Session->check('id_intervencione')) {
                // RECUPERAMOS LA INFORMACIÓN DE LA INTERVENCIÓN CARGADA
                $intervencione_id = $this->Session->read('id_intervencione');

                $hidden_intervencione_id = "<input type='hidden' id='IntervencioneId' name='data[Intervencione][id]' value='" . $intervencione_id . "'>";

                $this->Intervencione->recursive = 0;
                $this->Intervencione->id = $intervencione_id;
                $intervencion = $this->Intervencione->read();

                if (!empty($intervencion)) {
                    $obra_id = $intervencion['Intervencione']['obra_id'];
                    $obras_tipo_id = $intervencion['Obra']['obras_tipo_id'];
                    $obra_name = $intervencion['Obra']['nombre'];
                    $nivele_id = $intervencion['Intervencione']['nivele_id'];
                    $intervenciones_tipo_id = $intervencion['Intervencione']['intervenciones_tipo_id'];
                    $entidad_responsable = $intervencion['Intervencione']['entidad_responsable'];
                    $fecha_inicio = date('d/m/Y', strtotime($intervencion['Intervencione']['fecha_inicio']));
                    $fecha_fin = date('d/m/Y', strtotime($intervencion['Intervencione']['fecha_fin']));
                }
            } else {
                $obra = $this->Obra->find('first', array('recursive' => -1, 'conditions' => array('Obra.id' => $obra_id)));
                if (!empty($obra)) {
                    $obras_tipo_id = $obra['Obra']['obras_tipo_id'];
                    $obra_name = $obra['Obra']['nombre'];
                    $nivele_id = $obra['Obra']['nivele_id'];
                }
            }
        }
        $referer = $this->referer();
        $this->set(compact('obrasTipos', 'intervencionesTipos', 'niveles', 'hidden_intervencione_id', 'referer'));
        $this->set(compact('obra_id', 'obras_tipo_id', 'intervenciones_tipo_id', 'obra_name', 'entidad_responsable', 'fecha_inicio', 'fecha_fin', 'nivele_id'));
        $this->render('add_datos_generales');
    }

    function view_obras() {
        $this->__aux_view_obras();
    }

    function admin_view_obras() {
        $this->__aux_view_obras();
    }

    /**
     * Permite filtrar las obras de arte por las siguientes opciones:
     * 1 - Tipo de obra (Puente, Alcantarilla, Todos)
     * 2 - Nombre de la obra (a través de un campo select filtrado por el tipo de obra)
     * 3 - Nombre de la obra (a través de un campo input permite buscar una obra por parte de su nombre)
     * 4 - Provincia, Departamento y/o Localidad
     */
    function __aux_view_obras() {
        $this->paginate['Obra']['fields'] = array('Obra.id', 'Obra.nombre', 'Obra.localidade_id', 'Obra.codigo_identificacion', 'Obra.ruta_tramo', 'Obra.progresiva', 'Obra.habilitada', 'Obra.obras_tipo_id', 'ObrasTipo.nombre', 'Ruta.id', 'Ruta.nombre', 'Localidad.id', 'Localidad.nombre', 'Localidad.departamento_id', 'Departamento.id', 'Departamento.nombre', 'Provincia.id', 'Provincia.nombre');
        $this->paginate['Obra']['joins'] = array(
            array(
                'table' => '"localidades"',
                'type' => 'INNER',
                'alias' => 'Localidad',
                'conditions' => array(
                    'Localidad.id=Obra.localidade_id'
                )
            ),
            array(
                'table' => '"departamentos"',
                'type' => 'INNER',
                'alias' => 'Departamento',
                'conditions' => array(
                    'Departamento.id=Localidad.departamento_id'
                )
            ),
            array(
                'table' => '"provincias"',
                'type' => 'INNER',
                'alias' => 'Provincia',
                'conditions' => array(
                    'Provincia.id=Departamento.provincia_id'
                )
            )
        );

        if ($this->Session->check('id_obra'))
            $this->Session->delete('id_obra');

        if ($this->Session->check('id_evaluacione'))
            $this->Session->delete('id_evaluacione');

        if ($this->Session->check('id_intervencione'))
            $this->Session->delete('id_intervencione');

        $obrasTipos = $this->Obra->ObrasTipo->find('list', array('fields' => array('ObrasTipo.id', 'ObrasTipo.nombre'), 'order' => 'ObrasTipo.nombre'));
        $obrasTipos[0] = 'Todas';
        $obras_tipo_id = '';

        $nombres_obras = array();
        $nombre = '';

        $habilitadas = array('0' => 'Inhabilitado', '1' => 'Habilitado');
        $habilitada_id = '';

        $provincias = $this->Provincia->find('list', array('fields' => array('Provincia.id', 'Provincia.nombre'), 'order' => 'Provincia.nombre'));
        $provincias[0] = 'Todas';
        $provincia_id = '';

        $departamentos = array();
        $departamento_id = '';
        $localidades = array();
        $localidade_id = '';

        $descripcion = '';   

        $condiciones = array();
        //si vienen datos del filtro
        if (!empty($this->data)) {
            if (isset ($this->data['Obra']['obras_tipo_id']) && !empty($this->data['Obra']['obras_tipo_id'])) {
                $condiciones[] = "Obra.obras_tipo_id = {$this->data['Obra']['obras_tipo_id']}";
            }
            if (isset ($this->data['Obra']['obras_tipo_id']) && (!empty($this->data['Obra']['obras_tipo_id']) || ($this->data['Obra']['obras_tipo_id'] == '0'))) {
                $obras_tipo_id = $this->data['Obra']['obras_tipo_id'];
                $this->Session->write('obras_tipo_id', $obras_tipo_id);
            }

            if (isset($this->data['Obra']['nombre']) && !empty($this->data['Obra']['nombre'])) {
                $condiciones[] = "Obra.id = {$this->data['Obra']['nombre']}";
            }

            if (isset($this->data['Obra']['nombre']) && (!empty($this->data['Obra']['nombre']) || ($this->data['Obra']['nombre'] == '0'))) {
                $nombre = $this->data['Obra']['nombre'];
                if (!empty($this->data['Obra']['obras_tipo_id'])) {
                    $nombres_obras = $this->Obra->find('list', array('conditions' => array('Obra.obras_tipo_id' => $this->data['Obra']['obras_tipo_id']),
                                'fields' => array('Obra.id', 'Obra.nombre'), 'order' => 'Obra.nombre'));
                } else {
                    $nombres_obras = $this->Obra->find('list', array('fields' => array('Obra.id', 'Obra.nombre'), 'order' => 'Obra.nombre'));
                }
                $nombres_obras['0'] = 'Todos';

                $this->Session->write('nombre', $nombre);
                $this->Session->write('nombres_obras', $nombres_obras);
            }


            if (isset ($this->data['Obra']['habilitada_id']) && (!empty($this->data['Obra']['habilitada_id']) || ($this->data['Obra']['habilitada_id'] == '0'))) {
                $condiciones[] = "Obra.habilitada = {$this->data['Obra']['habilitada_id']}";
            }
            if (isset ($this->data['Obra']['habilitada_id']) && (!empty($this->data['Obra']['habilitada_id']) || ($this->data['Obra']['habilitada_id'] == '0'))) {
                $habilitada_id = $this->data['Obra']['habilitada_id'];
                $this->Session->write('habilitada_id', $habilitada_id);
            }

            if (isset($this->data['Obra']['provincia_id']) && !empty($this->data['Obra']['provincia_id'])) {
                $condiciones[] = "Provincia.id = {$this->data['Obra']['provincia_id']}";
            }

            if (isset($this->data['Obra']['provincia_id']) && (!empty($this->data['Obra']['provincia_id']) || ($this->data['Obra']['provincia_id'] == '0'))) {
                $provincia_id = $this->data['Obra']['provincia_id'];
                $this->Session->write('provincia_id', $provincia_id);
            }

            if ((isset($this->data['Obra']['departamento_id'])) && (!empty($this->data['Obra']['departamento_id']))) {
                $condiciones[] = "Departamento.id = {$this->data['Obra']['departamento_id']}";
            }

            if ((isset($this->data['Obra']['departamento_id'])) && (!empty($this->data['Obra']['departamento_id']) || ($this->data['Obra']['departamento_id'] == '0'))) {
                $departamento_id = $this->data['Obra']['departamento_id'];
                if (!empty($this->data['Obra']['provincia_id'])) {
                    $departamentos = $this->Departamento->find('list', array('conditions' => array('Departamento.provincia_id' => $this->data['Obra']['provincia_id']),
                                'fields' => array('Departamento.id', 'Departamento.nombre'), 'order' => 'Departamento.nombre'));
                } else {
                    $departamentos = $this->Departamento->find('list', array('fields' => array('Departamento.id', 'Departamento.nombre'), 'order' => 'Departamento.nombre'));
                }
                $departamentos['0'] = 'Todos';

                $this->Session->write('departamento_id', $departamento_id);
                $this->Session->write('departamentos', $departamentos);
            }

            if ((isset($this->data['Obra']['localidade_id'])) && (!empty($this->data['Obra']['localidade_id']))) {
                $condiciones[] = "Localidad.id = {$this->data['Obra']['localidade_id']}";
            }

            if ((isset($this->data['Obra']['localidade_id'])) && (!empty($this->data['Obra']['localidade_id']) || ($this->data['Obra']['localidade_id'] == '0'))) {
                $localidade_id = $this->data['Obra']['localidade_id'];
                if (!empty($this->data['Obra']['departamento_id'])) {
                    $localidades = $this->Localidade->find('list', array('conditions' => array('Localidade.departamento_id' => $this->data['Obra']['departamento_id']),
                                'fields' => array('Localidade.id', 'Localidade.nombre'), 'order' => 'Localidade.nombre'));
                } else {
                    $localidades = $this->Localidade->find('list', array('fields' => array('Localidade.id', 'Localidade.nombre'), 'order' => 'Localidade.nombre'));
                }
                $localidades['0'] = 'Todas';
                $this->Session->write('localidade_id', $localidade_id);
                $this->Session->write('localidades', $localidades);
            }

            if (isset ($this->data['Obra']['descripcion']) && !empty($this->data['Obra']['descripcion'])) {
                $descripcion = utf8_encode(strtolower(utf8_decode(trim($this->data['Obra']['descripcion']))));
                $condiciones[] = "lower(Obra.nombre) LIKE '%{$descripcion}%'";
                $this->Session->write('descripcion', $this->data['Obra']['descripcion']);
            }

            $this->Session->write('intervenciones_filter', $condiciones);
        } elseif ($this->Session->check('intervenciones_filter')) {//si tengo cargado un filtro en session
            //me fijo si esta cambiando de pagina o cambiando el limit
            if (isset($this->params['named']['limit']) || isset($this->params['named']['page'])) {
                //si ya estaba siendo aplicado un filtro, lo sigo usando
                $condiciones = $this->Session->read('intervenciones_filter');
                $obras_tipo_id = ($this->Session->check('obras_tipo_id')) ? $this->Session->read('obras_tipo_id') : '';
                $nombres_obras = ($this->Session->check('nombres_obras')) ? $this->Session->read('nombres_obras') : array();
                $nombre = ($this->Session->check('nombre')) ? $this->Session->read('nombre') : '';
                $provincia_id = ($this->Session->check('provincia_id')) ? $this->Session->read('provincia_id') : '';
                $departamentos = ($this->Session->check('departamentos')) ? $this->Session->read('departamentos') : array();
                $departamento_id = ($this->Session->check('departamento_id')) ? $this->Session->read('departamento_id') : '';
                $localidades = ($this->Session->check('localidades')) ? $this->Session->read('localidades') : array();
                $localidade_id = ($this->Session->check('localidade_id')) ? $this->Session->read('localidade_id') : '';
                $descripcion = ($this->Session->check('descripcion')) ? $this->Session->read('descripcion') : '';
                $habilitadas = ($this->Session->check('habilitadas')) ? $this->Session->read('habilitadas') : array();
                $habilitada_id = ($this->Session->check('habilitada_id')) ? $this->Session->read('habilitada_id') : '';
            } else {
                //sino, lo borro de la session
                $this->Session->delete('intervenciones_filter');
                $this->Session->delete('obras_tipo_id');
                $this->Session->delete('nombres_obras');
                $this->Session->delete('nombre');
                $this->Session->delete('provincia_id');
                $this->Session->delete('departamentos');
                $this->Session->delete('departamento_id');
                $this->Session->delete('localidades');
                $this->Session->delete('localidade_id');
                $this->Session->delete('descripcion');
                $this->Session->delete('habilitadas');
                $this->Session->delete('habilitada_id');
            }
        }

        $referer = $this->referer();
        $this->paginate['Obra']['conditions'] = $condiciones;
        $this->set(compact('obrasTipos', 'obras_tipo_id', 'nombres_obras', 'nombre', 'provincia_id', 'departamentos', 'departamento_id', 'localidades', 'localidade_id', 'descripcion', 'provincias', 'referer', 'habilitadas', 'habilitada_id'));
        $this->set('obras', $this->paginate('Obra'));
        $this->render('view_obras');
    }

    function view_names_obras($obras_tipo_id = null) {
        $this->__aux_view_names_obras($obras_tipo_id);
    }

    function admin_view_names_obras($obras_tipo_id = null) {
        $this->__aux_view_names_obras($obras_tipo_id);
    }

    /**
     *
     * @param <type> $obras_tipo_id
     */
    function __aux_view_names_obras($obras_tipo_id = null) {
        $this->layout = false;
        $nombres_obras = array();

        if (!empty($obras_tipo_id)) {
            $nombres_obras = $this->Obra->find('list', array('conditions' => array('Obra.obras_tipo_id' => $obras_tipo_id), 'fields' => array('Obra.id', 'Obra.nombre'), 'order' => 'Obra.nombre'));
        } else {
            $nombres_obras = $this->Obra->find('list', array('fields' => array('Obra.id', 'Obra.nombre'), 'order' => 'Obra.nombre'));
        }
        $nombres_obras[0] = 'Todos';
        $this->set(compact('obras_tipo_id', 'nombres_obras'));
        $this->render('view_names_obras');
    }

    function view_departamentos($provincia_id = null) {
        $this->__aux_view_departamentos($provincia_id);
    }

    function admin_view_departamentos($provincia_id = null) {
        $this->__aux_view_departamentos($provincia_id);
    }

    /**
     * Busca los departamentos de una determinada provincia o todos los departamentos
     * @param <type> $provincia_id
     */
    function __aux_view_departamentos($provincia_id = null) {
        $this->layout = false;
        $departamentos = array();

        if (!empty($provincia_id)) {
            $departamentos = $this->Departamento->find('list', array('conditions' => array('Departamento.provincia_id' => $provincia_id), 'fields' => array('Departamento.id', 'Departamento.nombre'), 'order' => 'Departamento.nombre'));
        } else {
            $departamentos = $this->Departamento->find('list', array('fields' => array('Departamento.id', 'Departamento.nombre'), 'order' => 'Departamento.nombre'));
        }
        $departamentos[0] = 'Todos';
        $this->set(compact('provincia_id', 'departamentos'));
        $this->render('view_departamentos');
    }

    function view_localidades($departamento_id = null) {
        $this->__aux_view_localidades($departamento_id);
    }

    function admin_view_localidades($departamento_id = null) {
        $this->__aux_view_localidades($departamento_id);
    }

    /**
     * Busca las localidades de un determinado departamento o todas las localidades
     * @param <type> $departamento_id
     */
    function __aux_view_localidades($departamento_id = null) {
        $this->layout = false;
        $localidades = array();

        if (!empty($departamento_id)) {
            $localidades = $this->Localidade->find('list', array('conditions' => array('Localidade.departamento_id' => $departamento_id), 'fields' => array('Localidade.id', 'Localidade.nombre'), 'order' => 'Localidade.nombre'));
        } else {
            $localidades = $this->Localidade->find('list', array('fields' => array('Localidade.id', 'Localidade.nombre'), 'order' => 'Localidade.nombre'));
        }
        $localidades[0] = 'Todas';
        $this->set(compact('departamento_id', 'localidades'));
        $this->render('view_localidades');
    }

    function view_historial($obra_id = null) {
        $this->__aux_view_historial($obra_id);
    }

    function admin_view_historial($obra_id = null) {
        $this->__aux_view_historial($obra_id);
    }

    /**
     * Permite filtrar el historial de intervenciones de una obra de arte determinada por las siguientes opciones:
     * 1 - Tipo de intervención
     * 2 - Entidad Responsable
     * 3 - Fecha de inicio
     * 4 - Fecha de finalización
     * 5 - Nivel de servicio
     */
    function __aux_view_historial($obra_id = null) {
        $intervencionesTipos = $this->Intervencione->IntervencionesTipo->find('list', array('fields' => array('IntervencionesTipo.id', 'IntervencionesTipo.nombre')));
        $intervenciones_tipo_id = '';
        $entidad_responsable = '';
        $fecha_inicio = '';
        $fecha_fin = '';
        $niveles = $this->Nivele->find('list', array('fields' => array('Nivele.id', 'Nivele.nivel_servicio')));
        $nivele_id = '';
        $condiciones = array();

        if (!empty($this->data)) {
            if (isset($this->data['Intervencione']['obra_id']) && !empty($this->data['Intervencione']['obra_id'])) {
                $condiciones[] = "Intervencione.obra_id = {$this->data['Intervencione']['obra_id']}";
                $obra_id = $this->data['Intervencione']['obra_id'];
                $this->Session->write('obra_id', $obra_id);

                if (isset($this->data['Intervencione']['intervenciones_tipo_id']) && !empty($this->data['Intervencione']['intervenciones_tipo_id'])) {
                    $condiciones[] = "Intervencione.intervenciones_tipo_id = {$this->data['Intervencione']['intervenciones_tipo_id']}";
                    $intervenciones_tipo_id = $this->data['Intervencione']['intervenciones_tipo_id'];
                    $this->Session->write('intervenciones_tipo_id', $intervenciones_tipo_id);
                }

                if (isset($this->data['Intervencione']['entidad_responsable']) && !empty($this->data['Intervencione']['entidad_responsable'])) {
                    $entidad_responsable = utf8_encode(strtolower(utf8_decode(trim($this->data['Intervencione']['entidad_responsable']))));
                    $condiciones[] = "lower(Intervencione.entidad_responsable) LIKE '%{$entidad_responsable}%'";
                    $this->Session->write('entidad_responsable', $this->data['Intervencione']['entidad_responsable']);
                }

                if (isset($this->data['Intervencione']['fecha_inicio']) && !empty($this->data['Intervencione']['fecha_inicio'])) {
                    list($dia, $mes, $anio) = explode('/', $this->data['Intervencione']['fecha_inicio']);
                    $fecha_inicio_db = date("Y-m-d", strtotime(date($mes . '/' . $dia . '/' . $anio)));
                    $condiciones[] = "Intervencione.fecha_inicio >= '{$fecha_inicio_db}'";
                    $fecha_inicio = $this->data['Intervencione']['fecha_inicio'];
                    $this->Session->write('fecha_inicio', $fecha_inicio);
                }

                if (isset($this->data['Intervencione']['fecha_fin']) && !empty($this->data['Intervencione']['fecha_fin'])) {
                    list($dia, $mes, $anio) = explode('/', $this->data['Intervencione']['fecha_fin']);
                    $fecha_fin_db = date("Y-m-d", strtotime(date($mes . '/' . $dia . '/' . $anio)));
                    $condiciones[] = "Intervencione.fecha_fin >= '{$fecha_fin_db}'";
                    $fecha_fin = $this->data['Intervencione']['fecha_fin'];
                    $this->Session->write('fecha_fin', $fecha_fin);
                }

                if (isset ($this->data['Intervencione']['nivele_id']) && !empty($this->data['Intervencione']['nivele_id'])) {
                    $condiciones[] = "Intervencione.nivele_id = {$this->data['Intervencione']['nivele_id']}";
                    $nivele_id = $this->data['Intervencione']['nivele_id'];
                    $this->Session->write('nivele_id', $nivele_id);
                }

                $this->Session->write('historial_intervenciones_filter', $condiciones);
            }
        } elseif (!empty($obra_id)) {
            $condiciones[] = "Intervencione.obra_id = {$obra_id}";
        } elseif ($this->Session->check('historial_intervenciones_filter')) {//si tengo cargado un filtro en session
            //me fijo si esta cambiando de pagina o cambiando el limit
            if (isset($this->params['named']['limit']) || isset($this->params['named']['page'])) {
                //si ya estaba siendo aplicado un filtro, lo sigo usando
                $condiciones = $this->Session->read('historial_intervenciones_filter');
                $obra_id = ($this->Session->check('obra_id')) ? $this->Session->read('obra_id') : '';
                $intervenciones_tipo_id = ($this->Session->check('intervenciones_tipo_id')) ? $this->Session->read('intervenciones_tipo_id') : '';
                $entidad_responsable = ($this->Session->check('entidad_responsable')) ? $this->Session->read('entidad_responsable') : '';
                $fecha_inicio = ($this->Session->check('fecha_inicio')) ? $this->Session->read('fecha_inicio') : '';
                $fecha_fin = ($this->Session->check('fecha_fin')) ? $this->Session->read('fecha_fin') : '';
                $nivele_id = ($this->Session->check('nivele_id')) ? $this->Session->read('nivele_id') : '';
            } else {
                //sino, lo borro de la session
                $this->Session->delete('historial_intervenciones_filter');
                $this->Session->delete('obra_id');
                $this->Session->delete('intervenciones_tipo_id');
                $this->Session->delete('entidad_responsable');
                $this->Session->delete('fecha_inicio');
                $this->Session->delete('fecha_fin');
                $this->Session->delete('nivele_id');
            }
        } else {
            $this->redirect(array('controller' => 'intervenciones', 'action' => 'admin_view_obras'));
        }

        $referer = $this->referer();
        $this->paginate['Intervencione']['conditions'] = $condiciones;
        $this->set(compact('obra_id', 'intervencionesTipos', 'intervenciones_tipo_id', 'entidad_responsable', 'fecha_inicio', 'fecha_fin', 'niveles', 'nivele_id', 'referer'));
        $this->set('intervenciones', $this->paginate('Intervencione'));
        $this->render('view_historial');
    }

    function edit_intervencion($intervencione_id = null) {
        $this->__aux_edit_intervencion($intervencione_id);
    }

    function admin_edit_intervencion($intervencione_id = null) {
        $this->__aux_edit_intervencion($intervencione_id);
    }

    /**
     * Contiene la vista con las solapas para editar una intervención de una obra de arte
     * @param <type> $intervencione_id
     */
    function __aux_edit_intervencion($intervencione_id = null) {
        if (!empty($intervencione_id)) {
            $this->set(compact('intervencione_id'));
            $this->render('edit_intervencion');
        }
    }

    function edit_datos_generales($intervencione_id = null) {
        $this->__aux_edit_datos_generales($intervencione_id);
    }

    function admin_edit_datos_generales($intervencione_id = null) {
        $this->__aux_edit_datos_generales($intervencione_id);
    }

    /**
     * Permite editar una intervención de una obra de arte
     * @param <type> $intervencione_id
     */
    function __aux_edit_datos_generales($intervencione_id = null) {
        $this->layout = false;

        $obrasTipos = $this->ObrasTipo->find('list', array('fields' => array('ObrasTipo.id', 'ObrasTipo.nombre')));
        $obras_tipo_id = '';
        $obra_name = '';
        $intervencionesTipos = $this->Intervencione->IntervencionesTipo->find('list', array('fields' => array('IntervencionesTipo.id', 'IntervencionesTipo.nombre')));
        $niveles = $this->Nivele->find('list', array('fields' => array('Nivele.id', 'Nivele.nivel_servicio')));

        if (empty($this->data)) {
            if (!empty($intervencione_id)) {
                $this->Intervencione->recursive = 0;
                $this->Intervencione->id = $intervencione_id;
                $intervencion = $this->Intervencione->read();

                if (!empty($intervencion)) {
                    $this->data = $intervencion;
                    $obras_tipo_id = $intervencion['Obra']['obras_tipo_id'];
                    $obra_name = $intervencion['Obra']['nombre'];
                }
            }
        } else {
            $this->__save_datos_generales($this->data, $_FILES);
        }
        $referer = $this->referer();
        $this->set(compact('obras_tipo_id', 'obra_name', 'referer'));
        $this->set(compact('obrasTipos', 'intervencionesTipos', 'niveles'));
        $this->render('edit_datos_generales');
    }

    function __save_datos_generales($data = null, $files = null) {
        if (!empty($data)) {
            /** Chequeo si no existe en la db una intervención con los mismos datos:
             * entidad_responsable, fecha_inicio, fecha_fin, intervenciones_tipo_id, obra_id, nivele_id
             */
            $entidad_responsable = utf8_encode(strtolower(utf8_decode(trim($data['Intervencione']['entidad_responsable']))));

            if (isset($data['Intervencione']['id']) && (!empty($data['Intervencione']['id']))) {
                $intervencion = $this->Intervencione->find('all', array('conditions' => array('Intervencione.id <>' => $data['Intervencione']['id'], 'lower(Intervencione.entidad_responsable)' => $entidad_responsable, 'Intervencione.fecha_inicio' => $data['Intervencione']['fecha_inicio'], 'Intervencione.fecha_fin' => $data['Intervencione']['fecha_fin'],
                                'Intervencione.intervenciones_tipo_id' => $data['Intervencione']['intervenciones_tipo_id'], 'Intervencione.obra_id' => $data['Intervencione']['obra_id'], 'Intervencione.nivele_id' => $data['Intervencione']['nivele_id'])));
            } else {
                $intervencion = $this->Intervencione->find('all', array('conditions' => array('lower(Intervencione.entidad_responsable)' => $entidad_responsable, 'Intervencione.fecha_inicio' => $data['Intervencione']['fecha_inicio'], 'Intervencione.fecha_fin' => $data['Intervencione']['fecha_fin'],
                                'Intervencione.intervenciones_tipo_id' => $data['Intervencione']['intervenciones_tipo_id'], 'Intervencione.obra_id' => $data['Intervencione']['obra_id'], 'Intervencione.nivele_id' => $data['Intervencione']['nivele_id'])));
            }
            if (empty($intervencion)) {
                $this->Intervencione->begin();
                list($dia, $mes, $anio) = explode('/', $data['Intervencione']['fecha_inicio']);
                $data['Intervencione']['fecha_inicio'] = date("Y-m-d H:i:s", strtotime(date($mes . '/' . $dia . '/' . $anio)));
                list($dia, $mes, $anio) = explode('/', $data['Intervencione']['fecha_fin']);
                $data['Intervencione']['fecha_fin'] = date("Y-m-d H:i:s", strtotime(date($mes . '/' . $dia . '/' . $anio)));

                $obra_id = $data['Intervencione']['obra_id'];

                //Cuando adjuntamos un informe
                if (isset($files['fileUpload']['name']) && !empty($files['fileUpload']['name'])) {
                    // Definimos directorio donde se guarda el informe
                    $dir = dirname(dirname(__FILE__)) . '/files/intervenciones/';
                    // Si el directorio no existe, lo creamos
                    if (!@is_dir($dir)) {
                        if (!@mkdir($dir, 0777)) {
                            $this->Intervencione->rollback();
                            echo '<script>parent.resultadoUpload(3);</script> ';
                            exit;
                        }
                    }
                    $data['Intervencione']['informe'] = $files['fileUpload']['name'];
                }

                $this->Intervencione->create();
                if ($this->Intervencione->save($data)) {
                    $intervencione_id = $this->Intervencione->id;

                    // Intentamos Subir Archivo
                    // (1) Comprobamos que existe el nombre temporal del archivo
                    if (isset($files['fileUpload']['tmp_name']) && !empty($files['fileUpload']['tmp_name'])) {
                        // (2) - Comprobamos que se trata de un archivo correcto
                        if ($this->__mime_content_type($files['fileUpload']['name'])) {
                            $informe_ext = end(explode('.', $files['fileUpload']['name']));
                            $informe_nombre = $obra_id . '_' . $intervencione_id . '.' . $informe_ext;

                            // (3) Por ultimo se intenta copiar el archivo al servidor.
                            if (!copy($files['fileUpload']['tmp_name'], $dir . $informe_nombre)) {
                                $this->Intervencione->rollback();
                                echo '<script>parent.resultadoUpload(1);</script> ';
                                exit;
                            } else {
                                $this->Intervencione->commit();
                                if (!isset($data['Intervencione']['id'])) {
                                    $this->Session->write('id_intervencione', $intervencione_id);
                                }
                                echo '<script>parent.resultadoUpload(0);</script> ';
                                exit;
                            }
                        } else {
                            $this->Intervencione->rollback();
                            echo '<script>parent.resultadoUpload(2);</script> ';
                            exit;
                        }
                    } else {
                        $this->Intervencione->commit();
                        if (!isset($data['Intervencione']['id'])) {
                            $this->Session->write('id_intervencione', $intervencione_id);
                        }
                        echo '<script>parent.resultadoUpload(0);</script> ';
                        exit;
                    }
                } else {
                    $this->Intervencione->rollback();
                    echo '<script>parent.resultadoUpload(1);</script> ';
                    exit;
                }
            } else {
                $this->Intervencione->rollback();
                echo '<script>parent.resultadoUpload(4);</script> ';
                exit;
            }
        }
    }

    function download_informe($intervencione_id = null) {
        $this->__aux_download_informe($intervencione_id);
    }

    function admin_download_informe($intervencione_id = null) {
        $this->__aux_download_informe($intervencione_id);
    }

    function __aux_download_informe($intervencione_id = null) {
        $this->layout = false;
        if (!empty($intervencione_id)) {

            $this->Intervencione->recursive = -1;
            $intervencion = $this->Intervencione->findById($intervencione_id);

            if (!empty($intervencion)) {
                $informe_ext = end(explode('.', $intervencion['Intervencione']['informe']));
                $informe_nombre = $intervencion['Intervencione']['obra_id'] . '_' . $intervencione_id . '.' . $informe_ext;

                $file = dirname(dirname(__FILE__)) . '\files\intervenciones\\' . $informe_nombre;

                if (file_exists($file)) {
                    header('Content-Description: File Transfer');
                    header('Content-Type: application/octet-stream');
                    header('Content-Disposition: attachment; filename=' . basename($intervencion['Intervencione']['informe']));
                    header('Content-Length: ' . filesize($file));
                    readfile($file);
                    exit;
                }
            }
        }
    }

}
?>